#if _MSC_VER
 #pragma once
#endif // _MSC_VER

#ifndef __HERZELEID_BASICCAMERA_INCLUDED__
 #define __HERZELEID_BASICCAMERA_INCLUDED__
 #include "HerzeleidRendererModelResources.hxx"

 #ifdef HERZELEID_DESKTOP
  #define ref
  #define internal public
 #else
 #endif

HerzeleidRendererResourcesNamespaceBegin ref class BasicCamera
{
 #ifdef HERZELEID_DESKTOP
protected:
 #else
protected private:
 #endif

	DirectX::XMVECTOR m_Position;
	DirectX::XMVECTOR m_Direction;
	DirectX::XMMATRIX m_View;
	DirectX::XMMATRIX m_Proj;

internal:

	BasicCamera();

	Void GetViewMatrix( _Out_ DirectX::XMMATRIX *ViewMatrix );
	Void GetProjectionMatrix( _Out_ DirectX::XMMATRIX *ProjectionMatrix );

	Void SetViewParameters( 
		_In_ DirectX::XMFLOAT3A *EyePosition,	// The camera position. 
		_In_ DirectX::XMFLOAT3A *LookPosition,	// The point position the camera looks at.
		_In_ DirectX::XMFLOAT3A *UpDirection	// The direction for up.
		);
	Void SetViewParameters( 
		_In_ DirectX::XMVECTOR *EyePosition,	// The camera position. 
		_In_ DirectX::XMVECTOR *LookPosition,	// The point position the camera looks at.
		_In_ DirectX::XMVECTOR *UpDirection	// The direction for up.
		);

	Void SetProjectionParameters(
		_In_ Float32 fMinimumFieldOfView,
		_In_ Float32 fAspectRatio,
		_In_ Float32 fNearPlane,
		_In_ Float32 fFarPlane
		);

} HerzeleidRendererResourcesNamespaceEnd;

 #ifdef HERZELEID_DESKTOP
  #undef ref
  #undef internal
 #else
 #endif

#endif // !__HERZELEID_BASICCAMERA_INCLUDED__